/**
 * @description 线程同步例程：说明在同一个对象中的   多个同步方法    的运行机制
 * 程序说明：
 * 两个线程共用一个对象，该对象具有两个同步方法，观察同步方法是否为独占。
 * @pageNo 415
 * @author mlmoria
 * @date 2017年2月8日
 * 
 */
package No11Thread;

class J_ExperimentCopy{
	
	public static void mb_sleep(long millis){
		try {
			Thread.sleep(millis);
		} catch (InterruptedException e) {
		
			e.printStackTrace();
		}
	}
	
	public synchronized void mb_method1(int id){
		System.out.println("线程"+id+"进入同步方法1");
		mb_sleep(1000);
		System.out.println("线程"+id+"进入同步方法1");
		
	}
	
	public  synchronized void mb_method2(int id){
		System.out.println("线程"+id+"进入同步方法2");
		mb_sleep(1000);
		System.out.println("线程"+id+"进入同步方法2");
		
	}
	
}

public class J_SynchronizedMethod extends Thread{

	public int m_ID;
    
	public J_ExperimentCopy m_data;
	
	public J_SynchronizedMethod(int id) {
       m_ID=id;  
	}
	
	public void run(){
		System.out.println("运行线程："+m_ID);
		m_data.mb_method1(m_ID);
		m_data.mb_method2(m_ID);
		System.out.println("结束线程："+m_ID);
	}
	public static void main(String[] args) {
		
		int n=2;
		
		//这个直接声明一个对象数组的方式，需要注意一下，两边都是【】
		J_SynchronizedMethod [] t=new J_SynchronizedMethod[n];
		
		J_ExperimentCopy d=new J_ExperimentCopy();

		for(int i=0;i<n;i++){
			t[i]=new J_SynchronizedMethod(i);
			t[i].m_data=d;
			t[i].start();
		}	
	}
	
}
